#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:decorator.py
# author:张仁
# datetime:2021/3/21 13:06
# software: PyCharm
"""
    装饰器练习
        一个记录日志的装饰器
        一个记录运行的时间的装饰器
"""
import time
import functools


def log(func):
    """日志装饰器

    打印被装饰函数调用的日志信息"""

    @functools.wraps(func)
    def print_log(*args, **kw):
        print(f"日志信息：{func.__name__}()被调用")
        res = func(*args, **kw)
        return res

    return print_log


def metric(func):
    """装饰器

    打印被装饰函数执行时间"""

    @functools.wraps(func)
    def print_time(*args, **kw):
        print(f"{func.__name__}()被执行时的时间:", time.asctime(time.localtime(time.time())))
        result = func(*args, **kw)
        return result

    return print_time


@log
@metric
def fast(x, y):
    """计算两数字的加法

    被两个装饰器所装饰，一个是打印该函数调用的时间，另一个是打印该函数调用的日志信息"""
    time.sleep(0.0012)
    return x + y


@metric
def slow(x, y, z):
    time.sleep(0.1234)
    return x * y * z


if __name__ == '__main__':
    f = fast(11, 22)
    s = slow(11, 22, 33)
    if f != 33:
        print('测试失败!')
    elif s != 7986:
        print('测试失败!')
    else:
        print("测试通过！")
